home *** CD-ROM | disk | FTP | other *** search
/ Aminet 5 / Aminet 5 - March 1995.iso / Aminet / dev / misc / LEDA_gene.lha / LEDA-3.1c-generic / incl / LEDA / impl / range_tree1.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-08-05  |  2.7 KB  |  103 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  range_tree1.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef RANGE_TREE1_H
  16. #define RANGE_TREE1_H
  17.  
  18. #include <LEDA/impl/genra_tree.h>
  19.  
  20. //
  21. // D-Dimensional Range Trees
  22. // -------------------------------------
  23. //
  24. //
  25. // exchangable underlying data structure
  26. //
  27. // 7/92, M.Paul
  28. //
  29.  
  30.  
  31.  
  32. template<class keytype, class inftype>
  33. class range_tree1 : public genra_tree
  34. {
  35.  
  36.   GenPtr* Conv( keytype k[] ) const        // convert an array
  37.   { register int d;
  38.     GenPtr* ca = new GenPtr[dim1+1] ;
  39.     for( d=dim1; d>=0; d-- )
  40.       ca[d] = Convert(k[d]) ;
  41.     return ca ;
  42.   };
  43.  
  44.   int r_cmp( GenPtr x, GenPtr y ) const
  45.     { return compare(ACCESS(keytype,x),ACCESS(keytype,y)); }
  46.   void r_copy_key( GenPtr*& x ) const
  47.     { for( int d=dim1; d>=0; d-- ) x[d]=Copy(ACCESS(keytype,x[d])); }
  48.   void r_copy_inf( GenPtr& x ) const { x=Copy(ACCESS(inftype,x)); }
  49.   void r_clear_key( GenPtr*& x ) const
  50.     { for( int d=dim1; d>=0; d-- ) Clear(ACCESS(keytype,x[d])); }
  51.   void r_clear_inf( GenPtr& x ) const { Clear(ACCESS(inftype,x)); }
  52.  
  53.   public:
  54.  
  55.     void r_print_key( GenPtr* x ) const
  56.       { cout << "( ";
  57.     for( int d=dim1; d>=0; d--,cout << " " )
  58.       cout << (keytype) ACCESS(keytype,x[d]);
  59.         cout << ") "; }
  60.     void r_print_inf( GenPtr x ) const
  61.       { cout << (inftype) ACCESS(inftype,x); }
  62.  
  63.     LEDA_MEMORY( range_tree1 ) ;
  64.  
  65.     genra_tree* create_genra_tree( int d )
  66.       { return new range_tree1(d); }
  67.  
  68.     range_tree1( int d = 2 ) { dim1=d-1; }
  69.  
  70.     virtual void clear() { genra_tree::clear(); }
  71.     ~range_tree1() { clear(); }
  72.  
  73.     virtual int dimension() const { return genra_tree::dimension(); }
  74.     virtual int size() const { return genra_tree::size(); }
  75.     virtual int empty() const { return genra_tree::empty(); }
  76.  
  77.     virtual void query( keytype low[], keytype high[], list<GenPtr>& lgi) const
  78.       { GenPtr* l = Conv(low); GenPtr* h = Conv(high);
  79.         genra_tree::query(l,h,lgi);
  80.       }
  81.  
  82.     virtual grt_item lookup( keytype key[] ) const
  83.       { GenPtr* k = Conv(key); return genra_tree::lookup(k); }
  84.  
  85.     virtual list<GenPtr> all_items() const { return genra_tree::all_items(); }
  86.  
  87.     virtual grt_item insert( keytype key[], inftype inf )
  88.       { GenPtr* k = Conv(key) ;
  89.         grt_item gi = genra_tree::insert(k,Convert(inf));
  90.     return gi ;
  91.       }
  92.  
  93.     virtual void del( keytype key[] )
  94.       { GenPtr* k = Conv(key); genra_tree::del(k); }
  95.  
  96.     virtual void del_item( grt_item gi ) { genra_tree::del_item(gi); }
  97. } ;
  98.  
  99.  
  100.  
  101. #endif
  102.